package cn.iocoder.yudao.module.system.convert.user;

import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 用户转换
 *
 * @author huangweidong
 * @date 2023/05/09
 */
@Mapper
public interface UserConvert {

    UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code UserPageItemRespVO}
     */
    UserPageItemRespVO convert(AdminUserDO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code UserPageItemRespVO.Dept}
     */
    UserPageItemRespVO.Dept convert(DeptDO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code AdminUserDO}
     */
    AdminUserDO convert(UserCreateReqVO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code AdminUserDO}
     */
    AdminUserDO convert(UserUpdateReqVO bean);

    /**
     * convert02
     *
     * @param bean bean
     * @return {@code UserExcelVO}
     */
    UserExcelVO convert02(AdminUserDO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code AdminUserDO}
     */
    AdminUserDO convert(UserImportExcelVO bean);

    /**
     * convert03
     *
     * @param bean bean
     * @return {@code UserProfileRespVO}
     */
    UserProfileRespVO convert03(AdminUserDO bean);

    /**
     * 转换列表
     *
     * @param list 列表
     * @return {@code List<UserProfileRespVO.Role>}
     */
    List<UserProfileRespVO.Role> convertList(List<RoleDO> list);

    /**
     * convert02
     *
     * @param bean bean
     * @return {@code UserProfileRespVO.Dept}
     */
    UserProfileRespVO.Dept convert02(DeptDO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code AdminUserDO}
     */
    AdminUserDO convert(UserProfileUpdateReqVO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code AdminUserDO}
     */
    AdminUserDO convert(UserProfileUpdatePasswordReqVO bean);

    /**
     * 转换list02
     *
     * @param list 列表
     * @return {@code List<UserProfileRespVO.Post>}
     */
    List<UserProfileRespVO.Post> convertList02(List<PostDO> list);

    /**
     * 转换list03
     *
     * @param list 列表
     * @return {@code List<UserProfileRespVO.SocialUser>}
     */
    List<UserProfileRespVO.SocialUser> convertList03(List<SocialUserDO> list);

    /**
     * 转换list04
     *
     * @param list 列表
     * @return {@code List<UserSimpleRespVO>}
     */
    List<UserSimpleRespVO> convertList04(List<AdminUserDO> list);

    /**
     * convert4
     *
     * @param bean bean
     * @return {@code AdminUserRespDTO}
     */
    AdminUserRespDTO convert4(AdminUserDO bean);

    /**
     * 转换list4
     *
     * @param users 用户
     * @return {@code List<AdminUserRespDTO>}
     */
    List<AdminUserRespDTO> convertList4(List<AdminUserDO> users);

}
